package com.tao.YanMoDesignPattern.singleton.pattern.case1_Origin;

/**
 * 懒汉式
 *
 * @Author Mi_Tao
 * @Date 2023/7/23
 * @Description 考虑并发时候的单例 双检锁
 * @Version 1.0
 **/
public class LazySingleton_current {

    //定义一个变量来存储创建好的类实例  内存屏障去掉，直接访问共享内存
    private volatile static LazySingleton_current uniqueInstance = null;

    /**
     * 构造私有化方法，可以再内部控制创建实例的数目
     */
    private LazySingleton_current() {
    }

    /**
     * 获取单例
     *
     * @return {@link LazySingleton_current}
     */
    public static synchronized LazySingleton_current getSingleton(){
        // 判断存储实例的变量是否有值
        if (uniqueInstance == null){
            synchronized (LazySingleton_current.class){
                if (uniqueInstance == null){
                    // 如果没有，就创建一个
                    uniqueInstance = new LazySingleton_current();
                }
            }
        }
        // 否则直接返回
        return uniqueInstance;
    }

    /**
     * 单例可以有自己的操作
     */
    public void singletonOperation(){

    }

    public String getSingletonData() {
        return singletonData;
    }

    // 属性，单例可以有自己的属性
    private String singletonData;




}
